package cn.itcast.tanhua.sso.service;

import cn.itcast.tanhua.common.enums.SexEnum;
import cn.itcast.tanhua.common.mapper.UserInfoMapper;
import cn.itcast.tanhua.common.pojo.User;
import cn.itcast.tanhua.common.pojo.UserInfo;
import cn.itcast.tanhua.common.service.PicUploadService;
import cn.itcast.tanhua.common.vo.PicUploadResult;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.Map;

/**
 * @ClassName UserInfoService
 * @Description 完善注册信息
 * @Author WU
 * @Date 2021/5/25 19:49
 * @Version 1.0
 */
@Service
public class UserInfoService {
    @Autowired
    private UserService userService;

    @Autowired
    private UserInfoMapper userInfoMapper;

    @Autowired
    private FaceEngineService faceEngineService;


    @Autowired
    private PicUploadService picUploadService;

    /**
    * @Description: 完善用户注册信息
    * @Param: 注册信息及token，后续操作需要验证token
    * @return: true/false
    * @Author: Mr.Tan
    * @Date: 2021/5/25
    */
    public Boolean saveUserInfo(Map<String,String> param,String token){
//        校验token
        User user =this.userService.queryUserByToken(token);
//        如果没有通过token查询到用户，则返回false
        if (null == user) {
            return false;
        }

//        token验证通过后，添加用户注册信息
        UserInfo userInfo = new UserInfo();
//        短信验证码验证通过后，自动生成了用户id，可直接获取
        userInfo.setUserId(user.getId());
        userInfo.setSex(StringUtils.equalsIgnoreCase(param.get("gender"),"man")? SexEnum.MAN : SexEnum.WOMAN);
        userInfo.setNickName(param.get("nickname"));
        userInfo.setBirthday(param.get("birthday"));
        userInfo.setCity(param.get("city"));
//        如果添加信息成功，则返回值=1，判断后则返回true
        return this.userInfoMapper.insert(userInfo)==1;
    }


    /**
    * @Description: 上传用户图片
    * @Param: 图片，token
    * @return: true/false
    * @Author: Mr.Tan
    * @Date: 2021/5/25
    */
    public Boolean saveUserLogo(MultipartFile file,String token){
        //        校验token
        User user =this.userService.queryUserByToken(token);
//        如果没有通过token查询到用户，则返回false
        if (null == user) {
            return false;
        }
        //        token验证通过后，上传用户图片
//        上传图片前需要判断是否为人像
        try {
            boolean result = this.faceEngineService.checkIsPortrait(file.getBytes());
//            如果不是人像，则不进行上传操作
            if (!result) {
                return false;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

//        是人像，则进行上传
        PicUploadResult uploadResult = this.picUploadService.upload(file);
        if (StringUtils.isEmpty(uploadResult.getName())) {
//            上传失败
            return false;
        }

//        上传成功则将头像名称保存到用户信息中
        UserInfo userInfo = new UserInfo();
        userInfo.setLogo(uploadResult.getName());
//        更新用户信息表
        QueryWrapper<UserInfo> wrapper = new QueryWrapper<>();
        wrapper.eq("user_id",user.getId());
//        返回更新结果
        return this.userInfoMapper.update(userInfo,wrapper)==1;

    }
}
